package com.snow.java.base.junit;

import java.time.*;
import java.util.Date;

/**
 * @类名称：
 * @类描述：
 * @author: bingHeng
 * @Date 2018.04.13
 * @Version: 1.0
*/
public class MyDateTime2 {

    /**
     * LocalDate、 LocalTime、 LocalDateTime等类的实例是不可变的对象，分别表示使用ISO-8601日历系统的日期、时间、日期和时间。
     *
     * 它们提供了简单的日期或时间，并不包含当前的时间信息。也不包含与时区相关的信息。
     *
     * 这三个对象的操作方式完全一致，此处仅仅以LocalDateTime为例
     */

    public static void main(String[] args) {

        // 获取当前系统时间  获取实例1
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前系统时间为：" + localDateTime);

        // 获取实例2 获取指定的日期和时间
        LocalDateTime of = LocalDateTime.of(2019, 05, 01, 13, 50, 45, 334);
        System.out.println("获取的指定时间为：" + of);

        // 日期的加减  时间加减同理
        LocalDateTime localDateTime1 = LocalDateTime.now().plusYears(2);
        System.out.println("当前时间的基础上增加两年：" + localDateTime1);

        LocalDateTime localDateTime2 = LocalDateTime.now().minusYears(2);
        System.out.println("当前时间的基础上减去两年：" + localDateTime2);

        // 单独获取年月日时分秒
        System.out.println(LocalDateTime.now().getYear()); // 年
        System.out.println(LocalDateTime.now().getMonthValue()); //getMonthValue 和getMonth 的区别在返回值  月
        System.out.println(LocalDateTime.now().getDayOfMonth());// 日
        System.out.println(LocalDateTime.now().getDayOfYear()); // 当前年第多少天
        System.out.println(LocalDateTime.now().getDayOfWeek()); // 星期几
        System.out.println(LocalDateTime.now().getHour()); // 时
        System.out.println(LocalDateTime.now().getMinute());// 分
        System.out.println(LocalDateTime.now().getSecond());// 秒

        /**
         * 时间戳（Instant）：以Unix元年即1970年1月1日00:00:00到当前的毫秒值为时间戳
         */

        Instant now = Instant.now();
        System.out.println("默认获取的是以UTC时区为准的当前时间： " + now);

        // 以UTC时间为准，可以带偏移量进行运算，计算出本地时间
        OffsetDateTime offsetDateTime = Instant.now().atOffset(ZoneOffset.ofHours(8));
        System.out.println("UtC时区带偏移量运算的时间为：" + offsetDateTime);

        System.out.println("毫秒值显示时间戳：" + Instant.now().toEpochMilli());

        /**
         * Duration:计算两个时间之间的间隔
         * Period：计算两个日期之间的间隔
         */
        Duration between = Duration.between(LocalDateTime.now(), LocalDateTime.of(2019, 04, 13, 18, 50));
        System.out.println("两个时间之间间隔多少秒" + between.getSeconds());

        Period between1 = Period.between(LocalDate.now(), LocalDate.of(2019, 05, 01));
        System.out.println("两个日期之间间隔多少天：" + between1.getDays());

        LocalDateTime now1 = LocalDateTime.now();
        LocalDateTime of1 = LocalDateTime.of(2019, 04, 21, 14, 00, 00);
        Duration between2 = Duration.between(now1, of1);
        long l = between2.toMinutes();
        System.out.println("两个日期之间间隔：" + l);

        // 新旧日期的转换
        Date date = new Date();
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime s = instant.atZone(zoneId).toLocalDateTime();
        System.out.println("旧类型的日期为：" + date);
        System.out.println("新的日期为：" + s);
        Duration between3 = Duration.between(s, LocalDateTime.of(2019, 04, 21, 14, 10, 00));
        System.out.println(between3.toMinutes());
        LocalDateTime localDateTime3 = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(localDateTime3);

    }
}
